Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / core / ui / src / commonMain / kotlin / org / meshtastic / core / ui / component / NodeItemCompact.kt

Displaying Raw • Download

core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/NodeItemCompact.kt e330442dd5415dc7eb2bff4e3a3f1599c18022a1 (e330442d) Text, 21.83 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tf0883e@fileTb4b4b4:Te6edf3SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)

Tff7b72package T7ee787org.meshtastic.core.ui.component

Tff7b72import T7ee787androidx.compose.foundation.combinedClickable
Tff7b72import T7ee787androidx.compose.foundation.layout.Arrangement
Tff7b72import T7ee787androidx.compose.foundation.layout.Column
Tff7b72import T7ee787androidx.compose.foundation.layout.Row
Tff7b72import T7ee787androidx.compose.foundation.layout.fillMaxWidth
Tff7b72import T7ee787androidx.compose.foundation.layout.padding
Tff7b72import T7ee787androidx.compose.foundation.layout.size
Tff7b72import T7ee787androidx.compose.foundation.layout.widthIn
Tff7b72import T7ee787androidx.compose.material3.Card
Tff7b72import T7ee787androidx.compose.material3.CardDefaults
Tff7b72import T7ee787androidx.compose.material3.Icon
Tff7b72import T7ee787androidx.compose.material3.MaterialTheme
Tff7b72import T7ee787androidx.compose.material3.Text
Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.runtime.remember
Tff7b72import T7ee787androidx.compose.ui.Alignment
Tff7b72import T7ee787androidx.compose.ui.Modifier
Tff7b72import T7ee787androidx.compose.ui.draw.rotate
Tff7b72import T7ee787androidx.compose.ui.graphics.Color
Tff7b72import T7ee787androidx.compose.ui.graphics.vector.ImageVector
Tff7b72import T7ee787androidx.compose.ui.layout.ContentScale
Tff7b72import T7ee787androidx.compose.ui.semantics.Role
Tff7b72import T7ee787androidx.compose.ui.semantics.contentDescription
Tff7b72import T7ee787androidx.compose.ui.semantics.role
Tff7b72import T7ee787androidx.compose.ui.semantics.semantics
Tff7b72import T7ee787androidx.compose.ui.text.font.FontStyle
Tff7b72import T7ee787androidx.compose.ui.text.font.FontWeight
Tff7b72import T7ee787androidx.compose.ui.text.style.TextDecoration
Tff7b72import T7ee787androidx.compose.ui.text.style.TextOverflow
Tff7b72import T7ee787androidx.compose.ui.unit.dp
Tff7b72import T7ee787androidx.compose.ui.unit.sp
Tff7b72import T7ee787coil3.compose.AsyncImage
Tff7b72import T7ee787org.jetbrains.compose.resources.painterResource
Tff7b72import T7ee787org.jetbrains.compose.resources.stringResource
Tff7b72import T7ee787org.jetbrains.compose.resources.vectorResource
Tff7b72import T7ee787org.meshtastic.core.common.util.MetricFormatter
Tff7b72import T7ee787org.meshtastic.core.model.Node
Tff7b72import T7ee787org.meshtastic.core.model.isUnmessageableRole
Tff7b72import T7ee787org.meshtastic.core.model.util.toDistanceString
Tff7b72import T7ee787org.meshtastic.core.resources.Res
Tff7b72import T7ee787org.meshtastic.core.resources.distance
Tff7b72import T7ee787org.meshtastic.core.resources.ic_memory
Tff7b72import T7ee787org.meshtastic.core.resources.node_incomplete
Tff7b72import T7ee787org.meshtastic.core.resources.node_list_click_label
Tff7b72import T7ee787org.meshtastic.core.resources.node_list_long_click_label
Tff7b72import T7ee787org.meshtastic.core.resources.unknown_username
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Channel
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Counter0
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Counter1
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Counter2
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Counter3
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Counter4
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Counter5
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Counter6
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Counter7
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Counter8
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Distance
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Favorite
Tff7b72import T7ee787org.meshtastic.core.ui.icon.HardwareModel
Tff7b72import T7ee787org.meshtastic.core.ui.icon.HopCount
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Humidity
Tff7b72import T7ee787org.meshtastic.core.ui.icon.MapCompass
Tff7b72import T7ee787org.meshtastic.core.ui.icon.MeshtasticIcons
Tff7b72import T7ee787org.meshtastic.core.ui.icon.MqttConnected
Tff7b72import T7ee787org.meshtastic.core.ui.icon.PersonQuestion
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Pressure
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Temperature
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Unmessageable
Tff7b72import T7ee787org.meshtastic.core.ui.icon.role
Tff7b72import T7ee787org.meshtastic.core.ui.theme.StatusColors.StatusYellow
Tff7b72import T7ee787org.meshtastic.core.ui.util.LocalModemPreset
Tff7b72import T7ee787org.meshtastic.proto.Config

Tff7b72private Tff7b72const Tff7b72val Te6edf3COMPACT_ICON_SIZE_DP Tff7b72= T79c0ff1T79c0ff6

Tf0883e@Composable
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffLongParameterListTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCyclomaticComplexMethodTa5d6ff"Tb4b4b4)
Tff7b72fun Td2a8ffNodeItemCompactTb4b4b4(
Te6edf3thisNodeTb4b4b4: Te6edf3Node?Tb4b4b4,
Te6edf3thatNodeTb4b4b4: Te6edf3NodeTb4b4b4,
Te6edf3distanceUnitsTb4b4b4: Tffa657IntTb4b4b4,
Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4,
Te6edf3onClickTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657Unit Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onLongClickTb4b4b4: Tb4b4b4(Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4)Tff7b72? Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3isActiveTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3showPowerTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3showLastHeardTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3lastHeardIsRelativeTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3showLocationTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3showHopsTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3showSignalTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3showChannelTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3showRoleTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3showTelemetryTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3tempInFahrenheitTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3deviceImageUrlTb4b4b4: Tffa657String? Tff7b72= Tff7b72nullTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3longName Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3long_nameTb4b4b4.Te6edf3ifEmpty Tb4b4b4{ Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3unknown_usernameTb4b4b4) Tb4b4b4}
Tff7b72val Te6edf3isFavorite Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3isFavorite
Tff7b72val Te6edf3isIgnored Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3isIgnored
Tff7b72val Te6edf3isThisNode Tff7b72= Te6edf3rememberTb4b4b4(Te6edf3thatNodeTb4b4b4) Tb4b4b4{ Te6edf3thisNodeTff7b72?.Te6edf3num Tff7b72=Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3num Tb4b4b4}
Tff7b72val Te6edf3system Tff7b72=
Te6edf3rememberTb4b4b4(Te6edf3distanceUnitsTb4b4b4) Tb4b4b4{
Te6edf3ConfigTb4b4b4.Te6edf3DisplayConfigTb4b4b4.Te6edf3DisplayUnitsTb4b4b4.Te6edf3fromValueTb4b4b4(Te6edf3distanceUnitsTb4b4b4) Tff7b72?: Te6edf3ConfigTb4b4b4.Te6edf3DisplayConfigTb4b4b4.Te6edf3DisplayUnitsTb4b4b4.Te6edf3METRIC
Tb4b4b4}
Tff7b72val Te6edf3distance Tff7b72=
Te6edf3rememberTb4b4b4(Te6edf3thisNodeTb4b4b4, Te6edf3thatNodeTb4b4b4, Te6edf3systemTb4b4b4) Tb4b4b4{
Te6edf3thisNodeTff7b72?.Te6edf3distanceTb4b4b4(Te6edf3thatNodeTb4b4b4)Tff7b72?.Te6edf3takeIf Tb4b4b4{ Tffa657it Tff7b72> T79c0ff0 Tb4b4b4}Tff7b72?.Te6edf3toDistanceStringTb4b4b4(Te6edf3systemTb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3bearingDegrees Tff7b72= Te6edf3rememberTb4b4b4(Te6edf3thisNodeTb4b4b4, Te6edf3thatNodeTb4b4b4) Tb4b4b4{ Te6edf3thisNodeTff7b72?.Te6edf3bearingTb4b4b4(Te6edf3thatNodeTb4b4b4) Tb4b4b4}
Tff7b72val Te6edf3unmessageable Tff7b72=
Te6edf3rememberTb4b4b4(Te6edf3thatNodeTb4b4b4) Tb4b4b4{
Tff7b72when Tb4b4b4{
Te6edf3thatNodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3is_unmessagable Tff7b72!Tff7b72= Tff7b72null Tff7b72-Tff7b72> Te6edf3thatNodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3is_unmessagableTff7b72!!
Tff7b72else Tff7b72-Tff7b72> Te6edf3thatNodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3roleTb4b4b4.Te6edf3isUnmessageableRoleTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72val Te6edf3contentColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurface
Tff7b72val Te6edf3nodeColor Tff7b72=
Tb4b4b4(Tff7b72if Tb4b4b4(Te6edf3isThisNodeTb4b4b4) Te6edf3thisNodeTff7b72?.Te6edf3colorsTff7b72?.Te6edf3second Tff7b72else Te6edf3thatNodeTb4b4b4.Te6edf3colorsTb4b4b4.Te6edf3secondTb4b4b4)Tff7b72?.Te6edf3let Tb4b4b4{ Te6edf3ColorTb4b4b4(Tffa657itTb4b4b4) Tb4b4b4} Tff7b72?: Te6edf3ColorTb4b4b4.Te6edf3Transparent
Tff7b72val Te6edf3cardColors Tff7b72= Te6edf3CardDefaultsTb4b4b4.Te6edf3cardColorsTb4b4b4(Te6edf3containerColor Tff7b72= Te6edf3nodeTintedContainerTb4b4b4(Te6edf3nodeColorTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3cardBorder Tff7b72= Te6edf3nodeBorderStrokeTb4b4b4(Te6edf3nodeColorTb4b4b4, Te6edf3active Tff7b72= Te6edf3isActiveTb4b4b4)

Tff7b72val Te6edf3style Tff7b72= Tff7b72if Tb4b4b4(Te6edf3thatNodeTb4b4b4.Te6edf3isUnknownUserTb4b4b4) Te6edf3FontStyleTb4b4b4.Te6edf3Italic Tff7b72else Te6edf3FontStyleTb4b4b4.Te6edf3Normal

Tff7b72val Te6edf3a11yStrings Tff7b72= Te6edf3rememberNodeDescriptionStringsTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3modemPreset Tff7b72= Te6edf3LocalModemPresetTb4b4b4.Te6edf3current
Tff7b72val Te6edf3nodeDescription Tff7b72=
Te6edf3rememberTb4b4b4(Te6edf3thatNodeTb4b4b4, Te6edf3distanceTb4b4b4, Te6edf3lastHeardIsRelativeTb4b4b4, Te6edf3a11yStringsTb4b4b4, Te6edf3modemPresetTb4b4b4) Tb4b4b4{
Te6edf3buildNodeDescriptionTb4b4b4(
Te6edf3name Tff7b72= Te6edf3longNameTb4b4b4,
Te6edf3isOnline Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3isOnlineTb4b4b4,
Te6edf3isFavorite Tff7b72= Te6edf3isFavoriteTb4b4b4,
Te6edf3lastHeard Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3lastHeardTb4b4b4,
Te6edf3role Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3roleTb4b4b4.Te6edf3nameTb4b4b4,
Te6edf3hopsAway Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3hopsAwayTb4b4b4,
Te6edf3batteryLevel Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3batteryLevelTb4b4b4,
Te6edf3distance Tff7b72= Te6edf3distanceTb4b4b4,
Te6edf3snr Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3snrOrNullTb4b4b4,
Te6edf3viaMqtt Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3viaMqttTb4b4b4,
Te6edf3strings Tff7b72= Te6edf3a11yStringsTb4b4b4,
Te6edf3lastHeardIsRelative Tff7b72= Te6edf3lastHeardIsRelativeTb4b4b4,
Te6edf3modemPreset Tff7b72= Te6edf3modemPresetTb4b4b4,
Te6edf3isUnknownUser Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3isUnknownUserTb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3CardTb4b4b4(
Te6edf3modifier Tff7b72=
Te6edf3modifierTb4b4b4.Te6edf3nodeCardGlowTb4b4b4(Te6edf3lastHeard Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3lastHeardTb4b4b4, Te6edf3nodeColor Tff7b72= Te6edf3nodeColorTb4b4b4)Tb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3semanticsTb4b4b4(
Te6edf3mergeDescendants Tff7b72= Tff7b72trueTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3contentDescription Tff7b72= Te6edf3nodeDescription
Te6edf3role Tff7b72= Te6edf3RoleTb4b4b4.Te6edf3Button
Tb4b4b4}Tb4b4b4,
Te6edf3colors Tff7b72= Te6edf3cardColorsTb4b4b4,
Te6edf3border Tff7b72= Te6edf3cardBorderTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72=
Te6edf3ModifierTb4b4b4.Te6edf3combinedClickableTb4b4b4(
Te6edf3onClickLabel Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3node_list_click_labelTb4b4b4)Tb4b4b4,
Te6edf3onClick Tff7b72= Te6edf3onClickTb4b4b4,
Te6edf3onLongClickLabel Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3node_list_long_click_labelTb4b4b4)Tb4b4b4,
Te6edf3onLongClick Tff7b72= Te6edf3onLongClickTb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff1T79c0ff2.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff1T79c0ff0.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3TopTb4b4b4,
Tb4b4b4) Tb4b4b4{
T8b949e// Column 1: Chip + Battery (fixed width)
Te6edf3ColumnTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3widthInTb4b4b4(Te6edf3min Tff7b72= T79c0ff9T79c0ff0.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3horizontalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3StartTb4b4b4,
Te6edf3verticalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3NodeChipTb4b4b4(Te6edf3node Tff7b72= Te6edf3thatNodeTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3showPower Tff7b72&Tff7b72& Tb4b4b4(Te6edf3thatNodeTb4b4b4.Te6edf3batteryLevel Tff7b72?: T79c0ff0Tb4b4b4) Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3MaterialBatteryInfoTb4b4b4(
Te6edf3level Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3batteryLevel Tff7b72?: T79c0ff0Tb4b4b4,
Te6edf3voltage Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3voltage Tff7b72?: T79c0ff0fTb4b4b4,
Te6edf3contentColor Tff7b72= Te6edf3contentColorTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

T8b949e// Column 2: Content rows (fills remaining width)
Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4, Te6edf3verticalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
T8b949e// Row 1: Identity — name + PKC + favorite
Te6edf3CompactNameRowTb4b4b4(
Te6edf3thatNode Tff7b72= Te6edf3thatNodeTb4b4b4,
Te6edf3longName Tff7b72= Te6edf3longNameTb4b4b4,
Te6edf3style Tff7b72= Te6edf3styleTb4b4b4,
Te6edf3isIgnored Tff7b72= Te6edf3isIgnoredTb4b4b4,
Te6edf3isFavorite Tff7b72= Te6edf3isFavoriteTb4b4b4,
Te6edf3unmessageable Tff7b72= Te6edf3unmessageableTb4b4b4,
Tb4b4b4)

T8b949e// Row 2: Glanceable health — online + last heard + distance + signal
Te6edf3CompactHealthRowTb4b4b4(
Te6edf3thatNode Tff7b72= Te6edf3thatNodeTb4b4b4,
Te6edf3isThisNode Tff7b72= Te6edf3isThisNodeTb4b4b4,
Te6edf3distance Tff7b72= Te6edf3distanceTb4b4b4,
Te6edf3bearingDegrees Tff7b72= Te6edf3bearingDegreesTb4b4b4,
Te6edf3showLastHeard Tff7b72= Te6edf3showLastHeardTb4b4b4,
Te6edf3lastHeardIsRelative Tff7b72= Te6edf3lastHeardIsRelativeTb4b4b4,
Te6edf3showLocation Tff7b72= Te6edf3showLocationTb4b4b4,
Te6edf3showSignal Tff7b72= Te6edf3showSignalTb4b4b4,
Te6edf3contentColor Tff7b72= Te6edf3contentColorTb4b4b4,
Tb4b4b4)

T8b949e// Row 3: Environment metrics — temp · humidity · pressure (icon + value only)
Tff7b72if Tb4b4b4(Te6edf3showTelemetryTb4b4b4) Tb4b4b4{
Te6edf3CompactMetricsRowTb4b4b4(
Te6edf3thatNode Tff7b72= Te6edf3thatNodeTb4b4b4,
Te6edf3tempInFahrenheit Tff7b72= Te6edf3tempInFahrenheitTb4b4b4,
Te6edf3contentColor Tff7b72= Te6edf3contentColorTb4b4b4,
Tb4b4b4)
Tb4b4b4}

T8b949e// Row 4: Tertiary metadata — hardware · role · hops · channel
Te6edf3CompactFooterRowTb4b4b4(
Te6edf3thatNode Tff7b72= Te6edf3thatNodeTb4b4b4,
Te6edf3isThisNode Tff7b72= Te6edf3isThisNodeTb4b4b4,
Te6edf3showHops Tff7b72= Te6edf3showHopsTb4b4b4,
Te6edf3showChannel Tff7b72= Te6edf3showChannelTb4b4b4,
Te6edf3showRole Tff7b72= Te6edf3showRoleTb4b4b4,
Te6edf3deviceImageUrl Tff7b72= Te6edf3deviceImageUrlTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffCompactNameRowTb4b4b4(
Te6edf3thatNodeTb4b4b4: Te6edf3NodeTb4b4b4,
Te6edf3longNameTb4b4b4: Tffa657StringTb4b4b4,
Te6edf3styleTb4b4b4: Te6edf3FontStyleTb4b4b4,
Te6edf3isIgnoredTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3isFavoriteTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3unmessageableTb4b4b4: Tffa657BooleanTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3NodeSecurityIconsTb4b4b4(Te6edf3thatNodeTb4b4b4, Te6edf3iconSize Tff7b72= T79c0ff1T79c0ff8.Te6edf3dpTb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3longNameTb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3titleMediumEmphasizedTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3fontStyle Tff7b72= Te6edf3styleTb4b4b4)Tb4b4b4,
Te6edf3textDecoration Tff7b72= Te6edf3TextDecorationTb4b4b4.Te6edf3LineThroughTb4b4b4.Te6edf3takeIf Tb4b4b4{ Te6edf3isIgnored Tb4b4b4}Tb4b4b4,
Te6edf3maxLines Tff7b72= T79c0ff1Tb4b4b4,
Te6edf3overflow Tff7b72= Te6edf3TextOverflowTb4b4b4.Te6edf3EllipsisTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3thatNodeTb4b4b4.Te6edf3isUnknownUserTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3PersonQuestionTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3node_incompleteTb4b4b4)Tb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff1T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3tint Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3outlineTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3unmessageableTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3UnmessageableTb4b4b4,
Te6edf3contentDescription Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff1T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3tint Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3outlineTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3isFavoriteTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3FavoriteTb4b4b4,
Te6edf3contentDescription Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff1T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3tint Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3StatusYellowTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongParameterListTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCyclomaticComplexMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4)
Tff7b72private Tff7b72fun Td2a8ffCompactHealthRowTb4b4b4(
Te6edf3thatNodeTb4b4b4: Te6edf3NodeTb4b4b4,
Te6edf3isThisNodeTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3distanceTb4b4b4: Tffa657String?Tb4b4b4,
Te6edf3bearingDegreesTb4b4b4: Tffa657Int?Tb4b4b4,
Te6edf3showLastHeardTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3lastHeardIsRelativeTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3showLocationTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3showSignalTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3contentColorTb4b4b4: Te6edf3ColorTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3segments Tff7b72= Te6edf3buildList Tb4b4b4{
T8b949e// Last heard (tinted by online status)
Tff7b72if Tb4b4b4(Te6edf3showLastHeard Tff7b72&Tff7b72& Te6edf3thatNodeTb4b4b4.Te6edf3lastHeard Tff7b72> T79c0ff0 Tff7b72&Tff7b72& Tff7b72!Te6edf3isFutureDateTb4b4b4(Te6edf3thatNodeTb4b4b4.Te6edf3lastHeardTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3addTb4b4b4(
Tf0883e@Composable Tb4b4b4{
Te6edf3StatusAwareLastHeardTb4b4b4(
Te6edf3lastHeard Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3lastHeardTb4b4b4,
Te6edf3online Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3isOnlineTb4b4b4,
Te6edf3contentColor Tff7b72= Te6edf3contentColorTb4b4b4,
Te6edf3relative Tff7b72= Te6edf3lastHeardIsRelativeTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

T8b949e// Distance
Tff7b72if Tb4b4b4(Te6edf3showLocation Tff7b72&Tff7b72& Te6edf3distance Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Tff7b72!Te6edf3isThisNodeTb4b4b4) Tb4b4b4{
Te6edf3addTb4b4b4(
Tf0883e@Composable Tb4b4b4{
Te6edf3IconInfoTb4b4b4(
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3DistanceTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3distanceTb4b4b4)Tb4b4b4,
Te6edf3contentColor Tff7b72= Te6edf3contentColorTb4b4b4,
Te6edf3text Tff7b72= Te6edf3distanceTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

T8b949e// Bearing (rotated compass arrow)
Tff7b72if Tb4b4b4(Te6edf3showLocation Tff7b72&Tff7b72& Te6edf3bearingDegrees Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Tff7b72!Te6edf3isThisNodeTb4b4b4) Tb4b4b4{
Te6edf3addTb4b4b4(
Tf0883e@Composable Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3MapCompassTb4b4b4,
Te6edf3contentDescription Tff7b72= Ta5d6ff"Tffd700$Te6edf3bearingDegreesTa5d6ff°Ta5d6ff"Tb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(Te6edf3COMPACT_ICON_SIZE_DPTb4b4b4.Te6edf3dpTb4b4b4)Tb4b4b4.Te6edf3rotateTb4b4b4(Te6edf3bearingDegreesTb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3tint Tff7b72= Te6edf3contentColorTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

T8b949e// Signal quality, rated from SNR alone — RSSI is not part of the rating (#5446), so it must not gate it.
Tff7b72val Te6edf3directSnr Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3snrOrNullTff7b72?.Te6edf3takeIf Tb4b4b4{ Te6edf3thatNodeTb4b4b4.Te6edf3hopsAway Tff7b72=Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Tff7b72!Te6edf3thatNodeTb4b4b4.Te6edf3viaMqtt Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3showSignal Tff7b72&Tff7b72& Te6edf3directSnr Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3quality Tff7b72= Te6edf3determineSignalQualityTb4b4b4(Te6edf3directSnrTb4b4b4, Te6edf3LocalModemPresetTb4b4b4.Te6edf3currentTb4b4b4)
Te6edf3addTb4b4b4(
Tf0883e@Composable Tb4b4b4{
Te6edf3IconInfoTb4b4b4(
Te6edf3icon Tff7b72= Te6edf3vectorResourceTb4b4b4(Te6edf3qualityTb4b4b4.Te6edf3iconTb4b4b4)Tb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3qualityTb4b4b4.Te6edf3nameResTb4b4b4)Tb4b4b4,
Te6edf3contentColor Tff7b72= Te6edf3qualityTb4b4b4.Te6edf3colorTb4b4b4.Te6edf3invokeTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3qualityTb4b4b4.Te6edf3nameResTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3segmentsTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceBetweenTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3segmentsTb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3content Tff7b72-Tff7b72> Te6edf3contentTb4b4b4(Tb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongParameterListTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCyclomaticComplexMethodTa5d6ff"Tb4b4b4)
Tff7b72private Tff7b72fun Td2a8ffCompactFooterRowTb4b4b4(
Te6edf3thatNodeTb4b4b4: Te6edf3NodeTb4b4b4,
Te6edf3isThisNodeTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3showHopsTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3showChannelTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3showRoleTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3deviceImageUrlTb4b4b4: Tffa657String?Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3tertiaryColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3outline
Tff7b72val Te6edf3segments Tff7b72=
Te6edf3buildListTff7b72<Tf0883e@Composable Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTff7b72> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3showRoleTb4b4b4) Tb4b4b4{
Te6edf3add Tb4b4b4{
Te6edf3HardwareModelInfoTb4b4b4(
Te6edf3hwModelName Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3hw_modelTb4b4b4.Te6edf3nameTb4b4b4,
Te6edf3deviceImageUrl Tff7b72= Te6edf3deviceImageUrlTb4b4b4,
Te6edf3contentColor Tff7b72= Te6edf3tertiaryColorTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3add Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3roleTb4b4b4(Te6edf3thatNodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3roleTb4b4b4)Tb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3roleTb4b4b4.Te6edf3nameTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(Te6edf3COMPACT_ICON_SIZE_DPTb4b4b4.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3tint Tff7b72= Te6edf3tertiaryColorTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3showHops Tff7b72&Tff7b72& Te6edf3thatNodeTb4b4b4.Te6edf3hopsAway Tff7b72> T79c0ff0 Tff7b72&Tff7b72& Tff7b72!Te6edf3isThisNodeTb4b4b4) Tb4b4b4{
Te6edf3add Tb4b4b4{
Te6edf3IconInfoTb4b4b4(
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3HopCountTb4b4b4,
Te6edf3contentDescription Tff7b72= Ta5d6ff"Tffd700${Te6edf3thatNodeTb4b4b4.Te6edf3hopsAwayTffd700}Ta5d6ff hopsTa5d6ff"Tb4b4b4,
Te6edf3contentColor Tff7b72= Te6edf3tertiaryColorTb4b4b4,
Te6edf3text Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3hopsAwayTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3showChannel Tff7b72&Tff7b72& Te6edf3thatNodeTb4b4b4.Te6edf3channel Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3add Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3channelIconTb4b4b4(Te6edf3thatNodeTb4b4b4.Te6edf3channelTb4b4b4)Tb4b4b4,
Te6edf3contentDescription Tff7b72= Ta5d6ff"Ta5d6ffChannel Tffd700${Te6edf3thatNodeTb4b4b4.Te6edf3channelTffd700}Ta5d6ff"Tb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(Te6edf3COMPACT_ICON_SIZE_DPTb4b4b4.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3tint Tff7b72= Te6edf3tertiaryColorTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3showRole Tff7b72&Tff7b72& Te6edf3thatNodeTb4b4b4.Te6edf3viaMqttTb4b4b4) Tb4b4b4{
Te6edf3add Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3MqttConnectedTb4b4b4,
Te6edf3contentDescription Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(Te6edf3COMPACT_ICON_SIZE_DPTb4b4b4.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3tint Tff7b72= Te6edf3tertiaryColorTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Te6edf3SegmentedRowTb4b4b4(Te6edf3segmentsTb4b4b4)
Tb4b4b4}

Tf0883e@Composable
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffCyclomaticComplexMethodTa5d6ff"Tb4b4b4)
Tff7b72private Tff7b72fun Td2a8ffCompactMetricsRowTb4b4b4(Te6edf3thatNodeTb4b4b4: Te6edf3NodeTb4b4b4, Te6edf3tempInFahrenheitTb4b4b4: Tffa657BooleanTb4b4b4, Te6edf3contentColorTb4b4b4: Te6edf3ColorTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3env Tff7b72= Te6edf3thatNodeTb4b4b4.Te6edf3environmentMetrics
Tff7b72val Te6edf3segments Tff7b72=
Te6edf3buildListTff7b72<Tf0883e@Composable Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTff7b72> Tb4b4b4{
T8b949e// Temperature carries presence, so `null` already means "no sensor" — testing against 0 hid an ordinary
T8b949e// 0 °C reading. Mirrors the fix already made in NodeItem's gatherSensors.
Te6edf3envTb4b4b4.Te6edf3temperatureTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3temperature Tff7b72-Tff7b72>
Tff7b72val Te6edf3temp Tff7b72= Te6edf3MetricFormatterTb4b4b4.Te6edf3temperatureTb4b4b4(Te6edf3temperatureTb4b4b4, Te6edf3tempInFahrenheitTb4b4b4)
Te6edf3add Tb4b4b4{
Te6edf3IconInfoTb4b4b4(
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3TemperatureTb4b4b4,
Te6edf3contentDescription Tff7b72= Ta5d6ff"Ta5d6ffTemperatureTa5d6ff"Tb4b4b4,
Te6edf3contentColor Tff7b72= Te6edf3contentColorTb4b4b4,
Te6edf3text Tff7b72= Te6edf3tempTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3envTb4b4b4.Te6edf3relative_humidity Tff7b72?: T79c0ff0fTb4b4b4) Tff7b72!Tff7b72= T79c0ff0fTb4b4b4) Tb4b4b4{
Te6edf3add Tb4b4b4{
Te6edf3IconInfoTb4b4b4(
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3HumidityTb4b4b4,
Te6edf3contentDescription Tff7b72= Ta5d6ff"Ta5d6ffHumidityTa5d6ff"Tb4b4b4,
Te6edf3contentColor Tff7b72= Te6edf3contentColorTb4b4b4,
Te6edf3text Tff7b72= Te6edf3MetricFormatterTb4b4b4.Te6edf3humidityTb4b4b4(Te6edf3envTb4b4b4.Te6edf3relative_humidity Tff7b72?: T79c0ff0fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3envTb4b4b4.Te6edf3barometric_pressure Tff7b72?: T79c0ff0fTb4b4b4) Tff7b72!Tff7b72= T79c0ff0fTb4b4b4) Tb4b4b4{
Te6edf3add Tb4b4b4{
Te6edf3IconInfoTb4b4b4(
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3PressureTb4b4b4,
Te6edf3contentDescription Tff7b72= Ta5d6ff"Ta5d6ffPressureTa5d6ff"Tb4b4b4,
Te6edf3contentColor Tff7b72= Te6edf3contentColorTb4b4b4,
Te6edf3text Tff7b72= Te6edf3MetricFormatterTb4b4b4.Te6edf3pressureTb4b4b4(Te6edf3envTb4b4b4.Te6edf3barometric_pressure Tff7b72?: T79c0ff0fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3segmentsTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceBetweenTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3segmentsTb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3content Tff7b72-Tff7b72> Te6edf3contentTb4b4b4(Tb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffSegmentedRowTb4b4b4(Te6edf3segmentsTb4b4b4: Te6edf3ListTff7b72<Tf0883e@Composable Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTff7b72>Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3segmentsTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72return
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceBetweenTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3segmentsTb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3content Tff7b72-Tff7b72> Te6edf3contentTb4b4b4(Tb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffchannelIconTb4b4b4(Te6edf3channelTb4b4b4: Tffa657IntTb4b4b4)Tb4b4b4: Te6edf3ImageVector Tff7b72= Tff7b72when Tb4b4b4(Te6edf3channelTb4b4b4) Tb4b4b4{
T79c0ff0 Tff7b72-Tff7b72> Te6edf3MeshtasticIconsTb4b4b4.Te6edf3Counter0
T79c0ff1 Tff7b72-Tff7b72> Te6edf3MeshtasticIconsTb4b4b4.Te6edf3Counter1
T79c0ff2 Tff7b72-Tff7b72> Te6edf3MeshtasticIconsTb4b4b4.Te6edf3Counter2
T79c0ff3 Tff7b72-Tff7b72> Te6edf3MeshtasticIconsTb4b4b4.Te6edf3Counter3
T79c0ff4 Tff7b72-Tff7b72> Te6edf3MeshtasticIconsTb4b4b4.Te6edf3Counter4
T79c0ff5 Tff7b72-Tff7b72> Te6edf3MeshtasticIconsTb4b4b4.Te6edf3Counter5
T79c0ff6 Tff7b72-Tff7b72> Te6edf3MeshtasticIconsTb4b4b4.Te6edf3Counter6
T79c0ff7 Tff7b72-Tff7b72> Te6edf3MeshtasticIconsTb4b4b4.Te6edf3Counter7
T79c0ff8 Tff7b72-Tff7b72> Te6edf3MeshtasticIconsTb4b4b4.Te6edf3Counter8
Tff7b72else Tff7b72-Tff7b72> Te6edf3MeshtasticIconsTb4b4b4.Te6edf3Channel
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffisFutureDateTb4b4b4(Te6edf3lastHeardTb4b4b4: Tffa657IntTb4b4b4)Tb4b4b4: Tffa657Boolean Tb4b4b4{
Tff7b72val Te6edf3nowSeconds Tff7b72= Te6edf3orgTb4b4b4.Te6edf3meshtasticTb4b4b4.Te6edf3coreTb4b4b4.Te6edf3commonTb4b4b4.Te6edf3utilTb4b4b4.Te6edf3nowSecondsTb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3oneYearSeconds Tff7b72= T79c0ff3T79c0ff6T79c0ff5 Tff7b72* T79c0ff2T79c0ff4 Tff7b72* T79c0ff6T79c0ff0 Tff7b72* T79c0ff6T79c0ff0
Tff7b72return Te6edf3lastHeard Tff7b72> Te6edf3nowSeconds Tff7b72+ Te6edf3oneYearSeconds
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffHardwareModelInfoTb4b4b4(Te6edf3hwModelNameTb4b4b4: Tffa657StringTb4b4b4, Te6edf3deviceImageUrlTb4b4b4: Tffa657String?Tb4b4b4, Te6edf3contentColorTb4b4b4: Te6edf3ColorTb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4, Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3deviceImageUrl Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3AsyncImageTb4b4b4(
Te6edf3model Tff7b72= Te6edf3deviceImageUrlTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3hwModelNameTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(Te6edf3COMPACT_ICON_SIZE_DPTb4b4b4.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3contentScale Tff7b72= Te6edf3ContentScaleTb4b4b4.Te6edf3FitTb4b4b4,
Te6edf3fallback Tff7b72= Te6edf3painterResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3drawableTb4b4b4.Te6edf3ic_memoryTb4b4b4)Tb4b4b4,
Te6edf3error Tff7b72= Te6edf3painterResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3drawableTb4b4b4.Te6edf3ic_memoryTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3HardwareModelTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3hwModelNameTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(Te6edf3COMPACT_ICON_SIZE_DPTb4b4b4.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3tint Tff7b72= Te6edf3contentColorTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3alpha Tff7b72= T79c0ff0.65fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3hwModelNameTb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3labelMediumTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3fontWeight Tff7b72= Te6edf3FontWeightTb4b4b4.Te6edf3SemiBoldTb4b4b4, Te6edf3fontSize Tff7b72= T79c0ff1T79c0ff2.Te6edf3spTb4b4b4)Tb4b4b4,
Te6edf3color Tff7b72= Te6edf3contentColorTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3alpha Tff7b72= T79c0ff0.95fTb4b4b4)Tb4b4b4,
Te6edf3maxLines Tff7b72= T79c0ff1Tb4b4b4,
Te6edf3overflow Tff7b72= Te6edf3TextOverflowTb4b4b4.Te6edf3EllipsisTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.13s